//鼠标操作交互类
function a_move_class(){

    let _this=this;
    _this.regist_data={};//注册的数据
  
    _this.move_funcs={};//存放要执行的move函数的对象
    _this.up_funcs={};//存放要执行的up函数的对象
    _this.enter_funcs={};//存放要执行的enter函数的对象
    _this.leave_funcs={};//存放要执行的leave函数的对象
    _this.down_funcs={};//存放要执行的leave函数的对象
    _this.move_keys={};
    _this.keys={};//存放状态的对象
  
    _this.datas={};//存放用于传入各种函数的 一些数据参数
  
  
    //设置要运行的函数附带的参数
    _this.set_data=function(obj){
      let key=obj.key;
      let data=obj.data||{};
      // if(!_this.datas[key]){_this.datas[key]={}}
      _this.datas[key]=data;
    }
    _this.get_data=function(obj){
        let key=obj.key;
        return _this.datas[key];
    }
    //设置状态
    _this.set_flag=function(obj){
      let key=obj.key;
      let flag=obj.flag||true;
      _this.keys[key]=flag;
    }
    _this.set_move=function(obj){
    _this.move_funcs[obj.key]=obj.func;
    }
    _this.unset_move=function(obj){
        delete _this.move_funcs[obj.key];
    }
    _this.set_up=function(obj){
    _this.up_funcs[obj.key]=obj.func;
    }
    _this.unset_up=function(obj){
        delete _this.up_funcs[obj.key];
    }
    _this.set_enter=function(obj){
      let key=obj.key;
      let func=obj.func;
      let key2=obj.key2||'0';
      if(!_this.enter_funcs[key]){_this.enter_funcs[key]={}}
      _this.enter_funcs[key][key2]=func;
      // console.log("set_enter",obj)
    }
    _this.set_down=function(obj){
      let key=obj.key;
      let func=obj.func;
      let key2=obj.key2||'0';
      if(!_this.down_funcs[key]){_this.down_funcs[key]={}}
      _this.down_funcs[key][key2]=func;
      // console.log("down",obj)
    }
    _this.set_leave=function(obj){
      let key=obj.key;
      let func=obj.func;
      let key2=obj.key2||'0';
      if(!_this.leave_funcs[key]){_this.leave_funcs[key]={}}
      _this.leave_funcs[key][key2]=func;
    }
    // //鼠标释放触发函数
    // _this.mouseenter=function(event,params){
    //   for(let key in _this.regist_data){
    //     let obj=_this.regist_data[key];
    //     if(obj.mouseenter_flag==true){
    //       obj.mouseenter(event,params);
    //     }
    //   }
    // }
    //鼠标离开 触发函数
    _this.mousedown=function(event,params){
        for(let key in _this.keys){
          if(_this.keys[key]==true &&_this.leave_funs[key]){
            for(let k2 in _this.down_funcs[key]){
              try{
                _this.down_funcs[key][k2]({event:event,params:params,data:_this.datas[key]||{}})
              }
              catch{}
            }
          }
        }
    
      }
      
    //鼠标按下 触发函数
    _this.mouseup=function(event){
        // console.log("a_move_class up",_this.up_funcs)
        for (let key in _this.up_funcs){
            try{
                _this.up_funcs[key](event)
            }catch{}
        }
    }
    //鼠标移动 触发函数
    _this.mousemove=function(event){
        for (let key in _this.move_funcs){
            try{
                _this.move_funcs[key](event)
            }catch{}
        }
  
    }
    //鼠标移入 触发函数
    _this.mouseenter=function(event,params){
      for(let key in _this.keys){
        if(_this.keys[key]==true &&_this.enter_funs[key]){
          for(let k2 in _this.enter_funcs[key]){
            try{
              _this.enter_funcs[key][k2]({event:event,params:params,data:_this.datas[key]||{}})
            }
            catch{}
          }
        }
      }
  
    }
    //鼠标离开 触发函数
    _this.mouseleave=function(event,params){
      for(let key in _this.keys){
        if(_this.keys[key]==true &&_this.leave_funs[key]){
          for(let k2 in _this.leave_funcs[key]){
            try{
              _this.leave_funcs[key][k2]({event:event,params:params,data:_this.datas[key]||{}})
            }
            catch{}
          }
        }
      }
  
    }
    
    document.addEventListener('mousedown', _this.mousedown);  
    document.addEventListener('mousemove', _this.mousemove);  
    document.addEventListener('mouseup', _this.mouseup);  
    document.addEventListener('mouseleave', _this.mouseleave); // 注意是 mouseleave 而不是 mouseleve  
    document.addEventListener('mouseenter', _this.mouseenter);  
    }